package org.ysu.shoeShopping.controller;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.ysu.shoeShopping.entity.SpcifyShoes;
import org.ysu.shoeShopping.service.SpcifyShoesService;

import javax.annotation.Resource;

/**
 * 定制鞋管理控制器
 * 提供定制鞋的完整管理功能，包括：
 * - 定制鞋信息的增删改查
 * - 定制鞋状态管理
 * - 定制鞋分页查询和搜索
 * - 定制鞋的启用/禁用管理
 *
 * @author makejava
 * @since 2025-09-13 17:11:37
 */
@RestController
@RequestMapping("customShoes")
@CrossOrigin(origins = "*")
public class SpcifyShoesController {
    /**
     * 服务对象
     */
    @Resource
    private SpcifyShoesService spcifyShoesService;

    /**
     * 分页查询定制鞋列表
     * 支持按名称、品牌、类型等条件筛选
     *
     * @param spcifyShoes 筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    @GetMapping
    public ResponseEntity<Page<SpcifyShoes>> queryByPage(SpcifyShoes spcifyShoes, PageRequest pageRequest) {
        return ResponseEntity.ok(this.spcifyShoesService.queryByPage(spcifyShoes, pageRequest));
    }

    /**
     * 获取所有定制鞋列表（不分页）
     * 用于下拉选择等场景
     *
     * @return 所有定制鞋列表
     */
    @GetMapping("/all")
    public ResponseEntity<java.util.List<SpcifyShoes>> queryAll() {
        // 注意：这里需要Service层实现queryAll方法
        SpcifyShoes condition = new SpcifyShoes();
        PageRequest pageRequest = PageRequest.of(0, 1000); // 获取大量数据
        Page<SpcifyShoes> page = this.spcifyShoesService.queryByPage(condition, pageRequest);
        return ResponseEntity.ok(page.getContent());
    }

    /**
     * 通过主键查询单条定制鞋数据
     * 用于编辑页面数据回显
     *
     * @param id 定制鞋ID
     * @return 定制鞋详细信息
     */
    @GetMapping("/{id}")
    public ResponseEntity<SpcifyShoes> queryById(@PathVariable("id") Integer id) {
        SpcifyShoes spcifyShoes = this.spcifyShoesService.queryById(id);
        if (spcifyShoes == null) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok(spcifyShoes);
    }

    /**
     * 新增定制鞋
     * 创建新的定制鞋产品
     *
     * @param spcifyShoes 定制鞋信息
     * @return 新增结果
     */
    @PostMapping
    public ResponseEntity<SpcifyShoes> add(@RequestBody SpcifyShoes spcifyShoes) {
        try {
            SpcifyShoes result = this.spcifyShoesService.insert(spcifyShoes);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            return ResponseEntity.badRequest().build();
        }
    }

    /**
     * 修改定制鞋信息
     * 更新已有的定制鞋产品信息
     *
     * @param spcifyShoes 定制鞋信息
     * @return 修改结果
     */
    @PutMapping
    public ResponseEntity<SpcifyShoes> edit(@RequestBody SpcifyShoes spcifyShoes) {
        try {
            SpcifyShoes result = this.spcifyShoesService.update(spcifyShoes);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            return ResponseEntity.badRequest().build();
        }
    }

    /**
     * 删除定制鞋
     * 根据ID删除指定的定制鞋产品
     *
     * @param id 定制鞋ID
     * @return 删除是否成功
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Boolean> deleteById(@PathVariable("id") Integer id) {
        try {
            boolean result = this.spcifyShoesService.deleteById(id);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            return ResponseEntity.ok(false);
        }
    }

    /**
     * 批量删除定制鞋
     * 根据ID数组批量删除定制鞋产品
     *
     * @param ids 定制鞋ID数组
     * @return 删除结果
     */
    @DeleteMapping("/batch")
    public ResponseEntity<Boolean> batchDelete(@RequestBody Integer[] ids) {
        try {
            boolean allSuccess = true;
            for (Integer id : ids) {
                if (!this.spcifyShoesService.deleteById(id)) {
                    allSuccess = false;
                }
            }
            return ResponseEntity.ok(allSuccess);
        } catch (Exception e) {
            return ResponseEntity.ok(false);
        }
    }

    /**
     * 根据品牌查询定制鞋
     *
     * @param brandId 品牌ID
     * @return 该品牌下的所有定制鞋
     */
    @GetMapping("/brand/{brandId}")
    public ResponseEntity<java.util.List<SpcifyShoes>> queryByBrand(@PathVariable("brandId") Integer brandId) {
        SpcifyShoes condition = new SpcifyShoes();
        condition.setBrandId(brandId);
        PageRequest pageRequest = PageRequest.of(0, 1000);
        Page<SpcifyShoes> page = this.spcifyShoesService.queryByPage(condition, pageRequest);
        return ResponseEntity.ok(page.getContent());
    }

    /**
     * 根据类型查询定制鞋
     *
     * @param typeId 类型ID
     * @return 该类型下的所有定制鞋
     */
    @GetMapping("/type/{typeId}")
    public ResponseEntity<java.util.List<SpcifyShoes>> queryByType(@PathVariable("typeId") Integer typeId) {
        SpcifyShoes condition = new SpcifyShoes();
        condition.setTypeId(typeId);
        PageRequest pageRequest = PageRequest.of(0, 1000);
        Page<SpcifyShoes> page = this.spcifyShoesService.queryByPage(condition, pageRequest);
        return ResponseEntity.ok(page.getContent());
    }

}

